<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta name="author" content="Basho Technologies" />
	<meta name="description" content="Webmachine - software shaped like the Web - basho technologies" />
	<meta name="keywords" content="webmachine http rest web" />
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<link rel="stylesheet" href="css/style.css" type="text/css" />
	<title>Webmachine - software shaped like the Web</title>
</head>
<body>
	<div id="content">
		<h1><span class="hr"></span><a href="/">webmachine</a></h1>
		<ul id="top">
			<li><a class="current" href="/">Home</a></li>
			<li><a href="http://bitbucket.org/justin/webmachine/">Source Code</a></li>
                        <li><a href="contact.html">Contact</a></li>
		</ul>
		
		<div id="intro">
			<p>Webmachine is not much like the Web frameworks you're used to. You can call Webmachine a REST toolkit if you like, and we won't argue with you.</p>
		</div>
		<div id="left">
<p>
Webmachine is an application layer that adds HTTP semantic awareness on top of the excellent bit-pushing and HTTP syntax-management provided by
<a href="http://code.google.com/p/mochiweb/">mochiweb</a>,
and provides a simple and clean way to connect that to your
application's behavior.
</p>
<p>
A Webmachine application is a set of resources, each of which is a set of
<a href="resources.html">functions</a> over the state of the resource. We really mean functions here, not object-methods, infinite-server-loops, or any other such construction. This aspect of Webmachine is one of the reasons why Webmachine applications are relatively easy to understand and extend.
</p>
<p>
These functions give you a place to define the representations and other Web-relevant properties of your application's resources -- with the emphasis that the first-class things on the Web are resources and that their essential properties of interaction are already quite well defined and usefully constrained.
</p>
<p>
For most Webmachine applications, most of the functions are quite small and isolated. One of the nice effects of this is that a quick reading of a resource will give you an understanding of the application, its Web behavior, and the relationship between them. Since these functions are usually <a href="reftrans.html">referentially transparent</a>, Webmachine applications can be quite easy to test. There's no need for mock objects, fake database connections, or any other wastes of time when you can write tests against each component of your application in terms of the input and output to various functions.
</p>
<p>
We believe that by giving Web developers a
<a href="mechanics.html">system</a> with conventions that
<a href="diagram.html">directly map to HTTP</a>
and REST, we help them to write and extend Web applications quickly while not dictating the shape of the rest of their application. The resulting applications are straightforward to examine and maintain, and have very easily understood HTTP semantics.
</p>			
		</div>
		<div id="right">
			<h3>more information</h3>
			<ul>
				<li><a href="intros.html">introduction</a></li>
				<li><a href="docs.html">documentation</a></li>
				<li><a href="blogs.html">other writing</a></li>
			</ul>
                        <a href="diagram.html"><img src="images/WM200-crop.png" alt="Webmachine Diagram" /></a>
                        <a href="http://www.basho.com"><img src="images/basho-landscape.gif" alt="Basho" /></a>
		</div>
		<div id="footer">

		</div>
	</div>

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-4979965-5");
pageTracker._trackPageview();
} catch(err) {}</script>

</body>
</html>
